home *** CD-ROM | disk | FTP | other *** search
- unit testFileSync1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, ExtCtrls,
- GpFileSync;
-
- type
- TfrmMain = class(TForm)
- btnAcquiredQ: TButton;
- btnDoneReading: TButton;
- btnDoneWriting: TButton;
- btnEnterCS: TButton;
- btnEnterM: TButton;
- btnJoinG: TButton;
- btnLeaveCS: TButton;
- btnLeaveG: TButton;
- btnLeaveM: TButton;
- btnReadSWMR: TButton;
- btnReceiveMsg: TButton;
- btnResetE: TButton;
- btnSendMsg: TButton;
- btnSignalE: TButton;
- btnWaitForE: TButton;
- btnWriteSWMR: TButton;
- cbDeleteCS: TCheckBox;
- cbDeleteG: TCheckBox;
- cbDeleteM: TCheckBox;
- cbDeleteSWMR: TCheckBox;
- cbResetE: TCheckBox;
- lbLog: TListBox;
- procedure btnAcquiredQClick(Sender: TObject);
- procedure btnEnterCSClick(Sender: TObject);
- procedure btnEnterMClick(Sender: TObject);
- procedure btnJoinGClick(Sender: TObject);
- procedure btnLeaveCSClick(Sender: TObject);
- procedure btnLeaveGClick(Sender: TObject);
- procedure btnLeaveMClick(Sender: TObject);
- procedure btnReceiveMsgClick(Sender: TObject);
- procedure btnResetEClick(Sender: TObject);
- procedure btnSendMsgClick(Sender: TObject);
- procedure btnSignalEClick(Sender: TObject);
- procedure btnWaitForEClick(Sender: TObject);
- procedure cbDeleteCSClick(Sender: TObject);
- procedure cbDeleteGClick(Sender: TObject);
- procedure cbDeleteMClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure btnWriteSWMRClick(Sender: TObject);
- procedure btnReadSWMRClick(Sender: TObject);
- procedure btnDoneWritingClick(Sender: TObject);
- procedure btnDoneReadingClick(Sender: TObject);
- private
- cs : TGpFileCriticalSection;
- e : TGpFileEvent;
- g : TGpFileGroup;
- m : TGpFileMutex;
- msg : TGpFileMessage;
- swmr: TGpFileSWMR;
- public
- end;
-
- var
- frmMain: TfrmMain;
-
- implementation
-
- {$R *.DFM}
-
- const
- CSName = 'TestFileSync.CS';
- EName = 'TestFileSync.E';
- GName = 'TestFileSync.G';
- MName = 'TestFileSync.M';
- MsgName = 'TestFileSync.Msg';
- SName = 'TestFileSync.S';
- SWMRName = 'TestFileSync.SWMR';
-
- procedure TfrmMain.FormCreate(Sender: TObject);
- begin
- cs := TGpFileCriticalSection.Create(CSName,cbDeleteCS.Checked);
- m := TGpFileMutex.Create(MName,cbDeleteM.Checked);
- e := TGpFileEvent.Create(EName);
- g := TGpFileGroup.Create(GName,cbDeleteG.Checked);
- msg := TGpFileMessage.Create(MsgName);
- swmr := TGpFileSWMR.Create(SWMRName,cbDeleteSWMR.Checked);
- end;
-
- procedure TfrmMain.FormDestroy(Sender: TObject);
- begin
- FreeAndNil(cs);
- FreeAndNil(m);
- FreeAndNil(e);
- FreeAndNil(g);
- FreeAndNil(msg);
- FreeAndNil(swmr);
- end;
-
- procedure TfrmMain.btnEnterCSClick(Sender: TObject);
- begin
- cs.Enter;
- cbDeleteCS.Enabled := false;
- lbLog.Items.Add('Entered');
- end;
-
- procedure TfrmMain.btnLeaveCSClick(Sender: TObject);
- begin
- cs.Leave;
- cbDeleteCS.Enabled := true;
- lbLog.Items.Add('Left');
- end;
-
- procedure TfrmMain.cbDeleteCSClick(Sender: TObject);
- begin
- FreeAndNil(cs);
- cs := TGpFileCriticalSection.Create(CSName,cbDeleteCS.Checked);
- end;
-
- procedure TfrmMain.btnEnterMClick(Sender: TObject);
- begin
- if not M.Acquire(1000) then
- lbLog.Items.Add('Timeout')
- else begin
- lbLog.Items.Add('Acquired');
- cbDeleteM.Enabled := false;
- end;
- end;
-
- procedure TfrmMain.btnLeaveMClick(Sender: TObject);
- begin
- M.Release;
- cbDeleteM.Enabled := true;
- lbLog.Items.Add('Released');
- end;
-
- procedure TfrmMain.cbDeleteMClick(Sender: TObject);
- begin
- FreeAndNil(m);
- m := TGpFileMutex.Create(MName,cbDeleteM.Checked);
- end;
-
- procedure TfrmMain.btnSignalEClick(Sender: TObject);
- begin
- if e.Signal then
- lbLog.Items.Add('Signalled')
- else
- lbLog.Items.Add('Already signalled');
- end;
-
- procedure TfrmMain.btnWaitForEClick(Sender: TObject);
- begin
- if e.WaitFor(1000,cbResetE.Checked) then
- lbLog.Items.Add('Awaited')
- else
- lbLog.Items.Add('Timeout')
- end;
-
- procedure TfrmMain.btnResetEClick(Sender: TObject);
- begin
- if e.Reset then
- lbLog.Items.Add('Reset')
- else
- lbLog.Items.Add('Already reset');
- end;
-
- procedure TfrmMain.btnAcquiredQClick(Sender: TObject);
- begin
- if m.Acquired then
- lbLog.Items.Add('Yes')
- else
- lbLog.Items.Add('No');
- end;
-
- procedure TfrmMain.cbDeleteGClick(Sender: TObject);
- begin
- FreeAndNil(g);
- g := TGpFileGroup.Create(GName,cbDeleteG.Checked);
- end;
-
- procedure TfrmMain.btnJoinGClick(Sender: TObject);
- var
- isFirst: boolean;
- begin
- if g.Join(INFINITE,isFirst) then
- lbLog.Items.Add('Joined, isFirst: '+IntToStr(Ord(isFirst)))
- else
- lbLog.Items.Add('Already joined');
- end;
-
- procedure TfrmMain.btnLeaveGClick(Sender: TObject);
- var
- wasLast: boolean;
- begin
- if g.Leave(INFINITE,wasLast) then
- lbLog.Items.Add('Left, wasLast: '+IntToStr(Ord(wasLast)))
- else
- lbLog.Items.Add('Already left');
- end;
-
- procedure TfrmMain.btnSendMsgClick(Sender: TObject);
- var
- s: string;
- begin
- s := 'Message';
- lbLog.Items.Add('Send: '+IntToStr(Ord(msg.Send(3000,@s[1],Length(s)))));
- end;
-
- procedure TfrmMain.btnReceiveMsgClick(Sender: TObject);
- var
- msgData: pointer;
- msgSize: integer;
- s : string;
- begin
- if msg.Receive(3000,msgData,msgSize) then begin
- SetLength(s,msgSize);
- Move(msgData^,s[1],msgSize);
- FreeMem(msgData);
- lbLog.Items.Add('Received: '+s);
- end
- else
- lbLog.Items.Add('Timeout');
- end;
-
- procedure TfrmMain.btnWriteSWMRClick(Sender: TObject);
- begin
- if not swmr.WaitToWrite(5000) then
- lbLog.Items.Add('Cannot write')
- else
- lbLog.Items.Add('Writing');
- end;
-
- procedure TfrmMain.btnReadSWMRClick(Sender: TObject);
- begin
- if not swmr.WaitToRead(5000) then
- lbLog.Items.Add('Cannot read')
- else
- lbLog.Items.Add('Reading');
- end;
-
- procedure TfrmMain.btnDoneWritingClick(Sender: TObject);
- begin
- swmr.DoneWriting;
- lbLog.Items.Add('Not writing');
- end;
-
- procedure TfrmMain.btnDoneReadingClick(Sender: TObject);
- begin
- if not swmr.DoneReading(5000) then
- lbLog.Items.Add('Cannot stop reading')
- else
- lbLog.Items.Add('Not reading');
- end;
-
- end.
-
-